package cn.wetcland.panel;

import cn.TCSP;
import cn.util.TCUtil;
import cn.wetcland.dao.GlobalMarketDao;
import cn.wetcland.pojo.GlobalMarket;
import net.minecraft.server.v1_16_R3.NBTTagCompound;
import org.apache.ibatis.session.SqlSession;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;

import java.util.*;

public class GlobalMarketPanel {

    // 用于存储所有展示界面
    public static LinkedList<Inventory> globalMarketInventories = new LinkedList<>();

    public static Inventory getMenu() {
        Inventory inventory = Bukkit.createInventory(null, InventoryType.CHEST, "§d全球市场导航");
        ItemStack itemStack = new ItemStack(Material.GLISTERING_MELON_SLICE);
        ItemMeta itemMeta = itemStack.getItemMeta();
        itemMeta.setDisplayName("§b全球市场");
        ArrayList<String> strings = new ArrayList<>();
        strings.add("§d您可以在此处发布/购买有趣或者稀奇的物品");
        itemMeta.setLore(strings);
        itemStack.setItemMeta(itemMeta);
        inventory.setItem(11, itemStack);

        ItemStack itemStack1 = new ItemStack(Material.DIAMOND);
        ItemMeta itemMeta1 = itemStack1.getItemMeta();
        itemMeta1.setDisplayName("§b我正在出售的");
        ArrayList<String> strings1 = new ArrayList<>();
        strings1.add("§d您可以在此处查看你正在出售物品");
        itemMeta.setLore(strings1);
        itemStack1.setItemMeta(itemMeta1);
        inventory.setItem(13, itemStack1);

        ItemStack itemStack2 = new ItemStack(Material.EMERALD);
        ItemMeta itemMeta2 = itemStack2.getItemMeta();
        itemMeta2.setDisplayName("§b我要出售");
        ArrayList<String> strings2 = new ArrayList<>();
        strings2.add("§d您可以在此处发布物品");
        itemMeta2.setLore(strings2);
        itemStack2.setItemMeta(itemMeta2);
        inventory.setItem(15, itemStack2);
        return inventory;
    }

    public static Inventory getPublishPanel() {
        Inventory inventory = Bukkit.createInventory(null, 54, "§d全球市场发布");
        // 中心圈 淡蓝色玻璃
        ItemStack itemStack = new ItemStack(Material.LIGHT_BLUE_STAINED_GLASS_PANE);
        ItemMeta itemMeta = itemStack.getItemMeta();
        itemMeta.setDisplayName("§d请在中心圈内放置需要发布的物品");
        itemStack.setItemMeta(itemMeta);

        // 上加物品标志
        ItemStack itemStack1 = new ItemStack(Material.LANTERN);
        ItemMeta itemMeta1 = itemStack1.getItemMeta();
        itemMeta1.setDisplayName("§a增加 1 (最大无限制)");
        itemStack1.setItemMeta(itemMeta1);

        // 下减物品标志
        ItemStack itemStack2 = new ItemStack(Material.SOUL_LANTERN);
        ItemMeta itemMeta2 = itemStack2.getItemMeta();
        itemMeta2.setDisplayName("§c减少 1 (最小为 1)");
        itemStack2.setItemMeta(itemMeta2);

        // 值表示物品标志
        ItemStack itemStack3 = new ItemStack(Material.SUNFLOWER);
        ItemMeta itemMeta3 = itemStack3.getItemMeta();
        itemMeta3.setDisplayName("§b金币");
        ArrayList<String> strings = new ArrayList<>();
        strings.add("§a当前数量=1");
        itemMeta3.setLore(strings);
        itemStack3.setItemMeta(itemMeta3);

        ItemStack itemStack4 = new ItemStack(Material.HONEYCOMB);
        ItemMeta itemMeta4 = itemStack4.getItemMeta();
        itemMeta4.setDisplayName("§e总金币(左边4位的积)");
        ArrayList<String> strings1 = new ArrayList<>();
        strings1.add("§a当前总额=1");
        strings1.add("§b请使用 §cShift+鼠标左键 §b进行实际发布");
        strings1.add("§b在发布之前请确保您已在中心圈放入发布物品");
        strings1.add("§b在发布之前请确保您有足够的金币(手续费)");
        strings1.add("§c重要的事情说3遍: 将收取手续费 总金额的 5%");
        strings1.add("§c重要的事情说3遍: 将收取手续费 总金额的 5%");
        strings1.add("§c重要的事情说3遍: 将收取手续费 总金额的 5%");
        strings1.add("§c还需注意: 物品只能在市场流通 7天");
        strings1.add("§c还需注意: 售出得金币, 未售出则归还");
        itemMeta4.setLore(strings1);
        itemStack4.setItemMeta(itemMeta4);

        ItemStack itemStack5 = new ItemStack(Material.PINK_STAINED_GLASS_PANE);
        ItemMeta itemMeta5 = itemStack5.getItemMeta();
        itemMeta5.setDisplayName("§a-.-");
        itemStack5.setItemMeta(itemMeta5);
        for (int i = 0; i < 54; i++) if (i != 13) inventory.setItem(i, itemStack5);

        inventory.setItem(3, itemStack);
        inventory.setItem(4, itemStack);
        inventory.setItem(5, itemStack);
        inventory.setItem(12, itemStack);
        inventory.setItem(14, itemStack);
        inventory.setItem(21, itemStack);
        inventory.setItem(22, itemStack);
        inventory.setItem(23, itemStack);

        inventory.setItem(27, itemStack1);
        inventory.setItem(29, itemStack1);
        inventory.setItem(31, itemStack1);
        inventory.setItem(33, itemStack1);

        inventory.setItem(36, itemStack3);
        inventory.setItem(38, itemStack3);
        inventory.setItem(40, itemStack3);
        inventory.setItem(42, itemStack3);
        inventory.setItem(44, itemStack4);

        inventory.setItem(45, itemStack2);
        inventory.setItem(47, itemStack2);
        inventory.setItem(49, itemStack2);
        inventory.setItem(51, itemStack2);
        return inventory;
    }

    public static Inventory getPersonalPanel() {
        Inventory inventory = Bukkit.createInventory(null, 45, "§b全球市场-我已发布");
        ItemStack space = new ItemStack(Material.PINK_STAINED_GLASS_PANE);
        ItemMeta im = space.getItemMeta();
        im.setDisplayName("§a-.-");
        space.setItemMeta(im);
        for (int i = 0; i < 27; i++) if (i != 13) inventory.setItem(i, space);
        ItemStack guide = new ItemStack(Material.ROSE_BUSH);
        ItemMeta itemMeta = guide.getItemMeta();
        itemMeta.setDisplayName("§c说明指南");
        ArrayList<String> strings = new ArrayList<>();
        strings.add("§b您可以使用 §cSHIFT + 鼠标左键");
        strings.add("§b强制取下已发布物品(不管有没有过期)");
        strings.add("§c取下物品不归还手续费!!!");
        itemMeta.setLore(strings);
        guide.setItemMeta(itemMeta);
        inventory.setItem(13, guide);
        return inventory;
    }

    public static Inventory getGlobalMarketPanel() {
        Inventory inventory = Bukkit.createInventory(null, 54, "§b全球市场");
        ItemStack space = new ItemStack(Material.PINK_STAINED_GLASS_PANE);
        ItemMeta im = space.getItemMeta();
        im.setDisplayName("§a-.-");
        space.setItemMeta(im);
        for (int i = 36; i <= 44; i++) inventory.setItem(i, space);
        ItemStack itemStack = new ItemStack(Material.LILY_PAD);
        ItemMeta itemMeta = itemStack.getItemMeta();
        itemMeta.setDisplayName("§a上一页");
        itemStack.setItemMeta(itemMeta);

        ItemStack clone = itemStack.clone();
        ItemMeta itemMeta1 = clone.getItemMeta();
        itemMeta1.setDisplayName("§a下一页");
        clone.setItemMeta(itemMeta1);

        ItemStack itemStack1 = new ItemStack(Material.HORN_CORAL);
        ItemMeta itemMeta2 = itemStack1.getItemMeta();
        itemMeta2.setDisplayName("§a1/1");
        ArrayList<String> strings = new ArrayList<>();
        strings.add("§b SHIFT + 鼠标左键 进行购买");
        strings.add("§c 不能购买自己发布的物品");
        itemMeta2.setLore(strings);
        itemStack1.setItemMeta(itemMeta2);

        inventory.setItem(47, itemStack);
        inventory.setItem(49, itemStack1);
        inventory.setItem(51, clone);
        return inventory;
    }

    public static LinkedList<Inventory> getGlobalMarketInventories() {
        return globalMarketInventories;
    }

    public static void setGlobalMarketInventories(LinkedList<Inventory> globalMarketInventories) {
        GlobalMarketPanel.globalMarketInventories = globalMarketInventories;
    }

    public static void fillGlobalMarketInventories() {
        SqlSession sqlSession = TCSP.getSqlSessionFactory().openSession(true);
        GlobalMarketDao mapper = sqlSession.getMapper(GlobalMarketDao.class);
        List<GlobalMarket> mapperAll = mapper.findAll();
        List<GlobalMarket> all = new ArrayList<>();
        // 只将未超过下架时间的物品加入集合
        Date date = new Date();
        for (GlobalMarket globalMarket : mapperAll) {
            if (globalMarket.getEndTime().after(date)) {
                all.add(globalMarket);
            }
        }
        // 反转数组 目的：让后插入的数据展示在前面
        Collections.reverse(all);

        int totalPage = all.size() % 36 == 0 ? all.size() / 36 : (all.size() / 36) + 1;
        globalMarketInventories.clear();
        for (int i = 0; i < totalPage; i++) {
            Inventory globalMarketPanel = getGlobalMarketPanel();
            ItemStack item = globalMarketPanel.getItem(49);
            ItemMeta itemMeta = item.getItemMeta();
            itemMeta.setDisplayName("§a" + (i + 1) + "/" + totalPage);
            item.setItemMeta(itemMeta);
            for (int j = 0; j < 36; j++) {
                if (j+i*36 >= all.size()) break;
                GlobalMarket globalMarket = all.get(j+i*36);
                NBTTagCompound nbtTagCompound = TCUtil.convertByteArrToNBT(globalMarket.getItemByte());
                ItemStack itemStack = TCUtil.convertNBTTOItemStack(nbtTagCompound);
                ItemMeta im = itemStack.getItemMeta();
                List<String> lore = im.getLore();
                lore.add("§d物品编号=" + globalMarket.getId());
                im.setLore(lore);
                itemStack.setItemMeta(im);
                globalMarketPanel.setItem(j, itemStack);
                System.out.println(i + " -> " + j);
            }
            globalMarketInventories.add(globalMarketPanel);
        }
        sqlSession.close();
    }
}
